import * as console from "console";
import Koa from "koa"
import koaStatic from "koa-static"
const crossOrigin = require("koa2-cors");
const path = require("path");
const http = require("http");
const logs = require("koa-logger"); // 打印请求或返回的接口情况
const json = require("koa-json"); // 打印请求或返回的接口情况

import option from "./middleware/cwOption";
import { router } from "./routers/rooter";
import { koaBody } from 'koa-body'
// Create koa server
const app = new Koa();

app.use(koaStatic(path.join(__dirname, "webroot"), { maxAge: 0, index: "index.html", gzip: true })); // 设置静态资源页面
app.use(crossOrigin());
app.use(option);

// 处理formData
app.use(koaBody({
    patchNode: true, // 将请求体打到原生 node.js 的ctx.req中
    patchKoa: true, // 将请求体打到 koa 的 ctx.request 中
    encoding: "utf-8", // 编码格式
    json: true, // 是否解析 json 请求体
    text: true, // 是否解析 text/plain 的表单
    urlencoded: true, // 是否支持 urlencoded 的表单
    jsonLimit: "4mb", // 	JSON 数据体的大小限制
    formLimit: "4mb", // 限制表单请求体的大小
    textLimit: "56kb", // 限制 text body 的大小
    multipart: true, // 是否支持 multipart-formdata的表单
    jsonStrict: true, //  if set to true - only parses arrays or objects, default true
    formidable: {
        maxFileSize: 500 * 1000 * 1024 * 1024, // 500M
        maxFields: 1000, // 限制字段的数量
        // uploadDir: path.join(__dirname, config.uploadImageFolder), // 文件上传的文件夹
        keepExtensions: true, // 保持文件的后缀
        maxFieldsSize: 3 * 1024 * 1024, // 限制字段的最大大小// 2m
    },
    onError: (error: any) => {
        console.error(error);
    }
}));

app.use(router.allowedMethods()); // 允许的方法
app.use(router.routes()); // 路由

app.use(logs()); // Development style logger middleware for koa. Compatible with request-received.
app.use(json()); // json 格式化


const ENVIRONMENT = 'production';
const ServerPort: number = 12000; // 12000

const server = http.createServer(app.callback());

server.listen(ServerPort, () => {

    console.log(`https service is running at ${ENVIRONMENT} environment:\n - Local:   https://localhost:%d\n`, ServerPort);
    console.log(`
       _____                                             _____   __                    __              __
      / ___/  ___    _____ _   __  ___    _____         / ___/  / /_  ____ _   _____  / /_  ___   ____/ /
      \\__ \\  / _ \\  / ___/| | / / / _ \\  / ___/         \\__ \\  / __/ / __ \`/  / ___/ / __/ / _ \\ / __  /
     ___/ / /  __/ / /    | |/ / /  __/ / /            ___/ / / /_  / /_/ /  / /    / /_  /  __// /_/ /
    /____/  \\___/ /_/     |___/  \\___/ /_/            /____/  \\__/  \\__,_/  /_/     \\__/  \\___/ \\__,_/

  `);
});
